﻿using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Xml.Linq;

using System.Collections.Generic;
using GTipos;

public partial class PaginaMaestra : System.Web.UI.MasterPage
{
    private System.Diagnostics.Process process1;


    protected void Page_Load(object sender, EventArgs e)
    {
       // contralamos que no se inicialicen los elementos mas de una vez
       //if (this.ApplicationInstance.Session.IsNewSession == true)
       //{
         // InicializaElementos();
        
          Session.Add("Pagina_Maestra", this);
           
       //}
    }
    public void InicializaElementos()
    {
        _titulo = "Titulo por defecto";
        if (_cabecera == null)
        {
            _cabecera = new CtrlCabecera();
            _cabecera.setEstado(EstadoCabecera.SinSesion);          
        }
        if ( _menu == null)
        {
            _menu = new CtrlMenu();
            _menu.InicializaElementos();
        }
        if (_herramientas == null)
        {
            _herramientas = new CtrlHerramientas();
            _herramientas.InicializaElementos();
        }       
        if (_contenidos == null)
        {
            _contenidos = new CtrlContenidos();
            _contenidos.InicializaElementos();
        }       
        if (_estado == null)
        {
            _estado = new CtrlEstado();
            _estado.InicializaElementos();
        }      
        if (_pie == null)
        {
            _pie = new CtrlPie();  
            _pie.InicializaElementos();
        }
        
    }
    private void InitializeComponent()
    {

        InicializaElementos();
        this.process1 = new System.Diagnostics.Process();
        // 
        // process1
        // 
        this.process1.StartInfo.Domain = "";
        this.process1.StartInfo.LoadUserProfile = false;
        this.process1.StartInfo.Password = null;
        this.process1.StartInfo.StandardErrorEncoding = null;
        this.process1.StartInfo.StandardOutputEncoding = null;
        this.process1.StartInfo.UserName = "";
    }
    /// <summary>
    /// Metodo de puesta a cero de la interfaz
    /// </summary>
    public void Resetea()
    {
        _cabecera.Resetea();
        _menu.Resetea();
        _herramientas.Resetea();
        _contenidos.Resetea();
        _estado.Resetea();
        _pie.Resetea();
    }
    /// <summary>
    /// Metodo que permite modificar las opciones del menu
    /// </summary>
    /// <param name="parametro"></param>
    /// <param name="numero"></param>
    /// <returns></returns>
    public void setOpcionesMenu(List<String> parametro, int numero)
    {
        _menu.setOpciones(parametro, numero);

    }
    /// <summary>
    /// MEtodo de actualizado
    /// </summary>
    public void Actualiza()
    {
        _cabecera.Actualiza();
        _menu.Actualiza();
        _herramientas.Actualiza();
        _contenidos.Actualiza();
        _estado.Actualiza();
        _pie.Actualiza();
    }
    /// <summary>
    /// Devuelve el controlador cabecera
    /// </summary>
    /// <returns></returns>
    public CtrlCabecera getCabecera()
    {
        return _cabecera;
    }
    /// <summary>
    /// Devuelve el controlador menu
    /// </summary>
    /// <returns></returns>
    public CtrlMenu getMenu()
    {
        return _menu;
    }
    /// <summary>
    /// Devuelve el controlador herramientas
    /// </summary>
    /// <returns></returns>
    public CtrlHerramientas getHerramientas()
    {
        return _herramientas;
    }
    /// <summary>
    /// Devuelve el controlador contenidos
    /// </summary>
    /// <returns></returns>
    public CtrlContenidos getContenidos()
    {
        return _contenidos;
    }
    /// <summary>
    /// Devuelve el controlador estado
    /// </summary>
    /// <returns></returns>
    public CtrlEstado getEstado()
    {
        return _estado;
    }
    /// <summary>
    /// Devuelve el controlador pie
    /// </summary>
    /// <returns></returns>
    public CtrlPie getPie()
    {
        return _pie;
    }
    public void SetTitulo(String parametro)
    {
        if (parametro != null)
        {
            _titulo = parametro;
        }
    }
    public String getTitulo()
    {
         return  _titulo;
    }
    public void setMenu         (CtrlMenu parametro)
    {
        _menu = parametro;
    }
    public void setHerramientas (CtrlHerramientas parametro)
    {
        _herramientas = parametro;
    }
    public void setContenidos   (CtrlContenidos parametro)
    {
        _contenidos = parametro;
    }
    public void setEstado       (CtrlEstado parametro)
    {
        _estado = parametro;
    }
    public void setPie          (CtrlPie parametro)
    {
        _pie = parametro;
    }
    public Control FindControlRecursive(Control rootControl, string controlID)
    {
        if (rootControl.ID == controlID) return rootControl;

        foreach (Control controlToSearch in rootControl.Controls)
        {
            Control controlToReturn = FindControlRecursive(controlToSearch, controlID);
            if (controlToReturn != null) 
                  return controlToReturn;
        }
        return null;
    }
    /* 
     * Aquí definimos los métodos de comunicación que va a necesitar la navegación para personalizarse.
     * */
    //
    protected String _titulo;
    // Parte de la pagina donde esta el reloj y el logotipo de la academia
    protected CtrlCabecera _cabecera;
    
    // Parte donde se encuentran la barra horizontal de botones que dividen la funcionalidad
    protected CtrlMenu _menu;
    protected CtrlHerramientas _herramientas;
    protected CtrlContenidos _contenidos;
    protected CtrlEstado _estado;
    protected CtrlPie _pie;

    // falta un objeto que almacene el estado de cada controlador
}
